/* eslint-disable space-before-function-paren */
/* eslint-disable no-undef */
import { EiInfo } from '@eplat/ei';
import axios from 'axios';

const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  headers: {
    'Content-Type': 'application/json;charset=utf-8', // E.AJAX.ContentType.JSON, // 提交时的数据格式
    Accept: 'application/json,*/*' // 服务器返回的数据格式
  },
  timeout: 500000
});
export const EiCommunicator = {
  callService: function (serviceId, postEiInfo, callback, ajaxOptions) {
    return this.send(serviceId, null, postEiInfo, callback, ajaxOptions);
  },

  /**
   * 封装前端ajax提交到EiService调用
   * @param {String} serviceName 服务名
   * @param {String} methodName 方法名
   * @param {EiInfo} postEiInfo 提交的EiInfo信息
   * @param {Object} callback 回调处理函数的对象{onSuccess:function() {}, onFail: function(){}}
   * @param {Object} ajaxOptions 自定义的ajax选项，覆盖默认的设置
   */
  send: function (serviceName, methodName, postEiInfo, callback, ajaxOptions) {
    const jsonEi = postEiInfo.toJSON();
    let url = '/shared-service/' + serviceName + '/' + methodName;

    if (methodName === null) {
      // 调用微服务
      url = '/shared-service/' + serviceName;
    }

    const axiosRequestConfig = {
      url,
      method: 'POST',
      headers: {
        'Content-Type': 'application/json;charset=utf-8', // E.AJAX.ContentType.JSON, // 提交时的数据格式
        Accept: 'application/json,*/*' // 服务器返回的数据格式
      },
      data: jsonEi,
      ...ajaxOptions
    };

    const promise = service.request(axiosRequestConfig);

    promise
      .then((res) => {
        const { data } = res;
        const ajaxEi = EiInfo.parseJSONObject(data);
        if (callback) {
          callback.success(ajaxEi);
        }
      })
      .catch((error) => {
        if (callback) {
          callback.fail(error);
          // callback.onFail(error.request.responseText.split("$$$")[0], status, e);
        }
      });

    return promise;
  },

  sendFuncCall: function (funcId, inInfo, callback) {
    // 特殊场景，调用后台的函数
    inInfo.set('funcId', funcId);
    EiCommunicator.send('EPFunc', 'call', inInfo, callback);
  },

  $send: function (sUrl, sContent, sCallback) {
    // axios 原生的ajax调用

    return service
      .request({
        url: sUrl,
        method: 'POST',
        headers: {
          'Content-Type': 'application/json;charset=utf-8', // E.AJAX.ContentType.JSON, // 提交时的数据格式
          Accept: 'application/json,*/*' // 服务器返回的数据格式
        },
        data: sContent
      })
      .then((res) => {
        const ajaxEi = EiInfo.parseJSONObject(res);
        sCallback.success(ajaxEi);
      })
      .catch((error) => {
        sCallback.fail(error);
      });
  }
};
